/*
尽可能还原 Promise 中的每一个 API, 并通过注释的方式描述思路和原理.
*/
const PENDING = 'pengding';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';

class MyPromise {
    //构造一个执行器
    constructor (ex){
        ex(this.resolve,this.reject)
    }
    //promise的状态
    status = PENDING;
    //成功失败的值
    value = undefined
    reason = undefined
//定义执行函数 
    resolve = value =>{
        //只有在等待着状态才可以更改状态值
        if(this.status !== PENDING) return;
        this.status = FULFILLED;
        this.value = value
    }
    reject = reson => {
        //只有在等待着状态才可以更改状态值
        if(this.status !== PENDING) return;
        this.status = REJECTED;
        this.reson = reson
    }
    then (successCallback,failCallback) {
        //判断状态然后再执行
        if (this.status === FULFILLED){
            successCallback(this.value)
        } else if(this.status === REJECTED) {
            failCallback(this.reson)
        }
    }
}